package awareness;

import collaboration.MIApplication;
import collaboration.MIDataAccessor;
import collaboration.MIUser;

/**
* Cliente de metainformacion del sistema
*
* @author Carlos Rodriguez Dominguez
*/
public class MIClient {
	
	private MIDataAccessor ctrl; /**< Interfaz CORBA de acceso a datos de metainformacion */
	
	/**
	* Constructor
	*
	* @param __orb Orbe de CORBA ya inicializado
	*/
	public MIClient(org.omg.CORBA.ORB __orb)
	{	
		try{
			org.omg.CORBA.Object obj;
			obj = __orb.resolve_initial_references("NameService");
			org.omg.CosNaming.NamingContext inc = org.omg.CosNaming.NamingContextHelper.narrow(obj);
			
			org.omg.CosNaming.NameComponent[] n = new org.omg.CosNaming.NameComponent[2];
			n[0] = new org.omg.CosNaming.NameComponent();
			n[0].id = "collaboration";
			n[0].kind = "";
			n[1] = new org.omg.CosNaming.NameComponent();
			n[1].id = "DataAccessor";
			n[1].kind = "Object";
			
			obj = inc.resolve(n);
			ctrl = collaboration.MIDataAccessorHelper.narrow(obj);
		}
		catch(Exception e)
		{
			e.printStackTrace();
			System.exit(1);
		}
	}
	
	/**
	* Obtiene una lista con la metainformacion de las aplicaciones
	*
	* @return Lista con la metainformacion de las aplicaciones
	*/
	public MIApplication[] applications()
	{
		return ctrl.applications();
	}
	
	/**
	* Obtiene una lista con la metainformacion de los usuarios
	* de una aplicacion
	*
	* @return Lista con la metainformacion de los usuarios
	*/
	public MIUser[] users(String app)
	{
		return ctrl.users_info(app);
	}
	
	/**
	* Obtiene el interfaz CORBA de acceso a datos de metainformacion.
	* No debe utilizarse esta interfaz directamente. Debe hacerse
	* uso de la clase @see MIServiceConnector para que se gestione
	* esta interfaz adecuadamente.
	*
	* @return Interfaz CORBA de acceso a datos de metainformacion
	*/
	public MIDataAccessor get_data_accessor()
	{
		return ctrl;
	}
}
